# -*- coding: utf-8 -*-
# @Time    : 22 1月 2025 1:24 下午
# @Author  : codervibe
# @File    : 动态规划-爬楼梯.py
# @Project : pythonBasics
"""
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？


"""
class Solution:
    def climbStairs(self, n: int) -> int:
        """
        计算爬到第 n 阶楼梯的方法总数。

        使用动态规划的思想，到达某一阶的方法数等于到达前两阶方法数的和。
        这个问题利用了斐波那契数列的性质，因为每一阶可以从前一阶或前两阶到达。

        参数:
        n (int): 目标楼梯的阶数

        返回:
        int: 爬到第 n 阶楼梯的方法总数
        """
        # 初始化两个状态变量，表示到达第 1 阶和第 2 阶的方法数
        a, b = 1, 1
        # 更新状态变量 n-1 次，以计算到达第 n 阶的方法数
        for _ in range(n - 1):
            # 更新状态变量，a 变为到达下一阶的方法数，b 变为到达当前阶的总方法数
            a, b = b, a + b
        # 返回到达第 n 阶的方法数
        return b
